import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.rmi.RemoteException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ChatGUI extends JFrame {

/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	//	private ChatClient client;
	private ChatService server;

	// private Container contentPane;
	// private Container input;
	// private Container output;
	private JTextArea eingabe;
	private static JTextArea ausgabe;
	private JScrollPane eingabeScroll;
	private JScrollPane ausgabeScroll;
	private JPanel eingabePanel;
	private JPanel ausgabePanel;
	public static JButton senden;

	public ChatGUI(final ChatService server) {
		super("Chat Fenster");

		// this.contentPane= this.getContentPane();
		eingabe = new JTextArea(4, 20);
		ausgabe = new JTextArea(10, 27);
		senden = new JButton("Senden");
		eingabePanel = new JPanel();
		eingabeScroll = new JScrollPane(eingabe,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		eingabePanel.add(eingabeScroll);
		ausgabePanel = new JPanel();
		ausgabeScroll = new JScrollPane(ausgabe,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		ausgabePanel.add(ausgabeScroll);
		
		this.server=server;

		ausgabe.setFocusable(false);
		ausgabe.setEditable(false);

		this.setLayout(new BorderLayout());

		this.add("Center", eingabePanel);
		this.add("North", ausgabePanel);
		this.add("East", senden);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.pack();
		this.setLocationRelativeTo(null);
		eingabe.requestFocus();

		// Bei Eingabe durch den Senden Button
		senden.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				if(e.getSource()==ChatGUI.senden){
					try {
						server.send((String) eingabe.getText());	//TODO wirft eine NullPointerException
						eingabe.setText("");
						eingabe.requestFocus();
					} catch (RemoteException e1) {
						e1.printStackTrace();
					}
				}
			}
		});

		// Bei Eingabe durch STRG + Enter
		eingabe.addKeyListener(new KeyListener() {

			public void keyPressed(KeyEvent e) {
				if (e.isControlDown() && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
					try {
						server.send((String) eingabe.getText());	// siehe oben
						eingabe.setText("");
						eingabe.requestFocus();
					} catch (RemoteException e1) {
						e1.printStackTrace();
					}
				}
			}

			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub

			}

			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub

			}
		});

	}

	public static void showMessage(String message) {
		ausgabe.append(message + "\n");
	}

//	public static void main(String[] args) {
//		ChatGUI chat = new ChatGUI();
//	}

}
